home *** CD-ROM | disk | FTP | other *** search
-
-
-
- PERLSTYLE(1) User Contributed Perl Documentation PERLSTYLE(1)
-
-
- NNNNAAAAMMMMEEEE
- perlstyle - Perl style guide
-
- DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
- Each programmer will, of course, have his or her own
- preferences in regards to formatting, but there are some
- general guidelines that will make your programs easier to
- read, understand, and maintain.
-
- The most important thing is to run your programs under the
- ----wwww flag at all times. You may turn it off explicitly for
- particular portions of code via the $$$$^^^^WWWW variable if you
- must. You should also always run under uuuusssseeee ssssttttrrrriiiicccctttt or know
- the reason why not. The <use sigtrap> and even <use
- diagnostics> pragmas may also prove useful.
-
- Regarding aesthetics of code lay out, about the only thing
- Larry cares strongly about is that the closing curly brace
- of a multi-line BLOCK should line up with the keyword that
- started the construct. Beyond that, he has other
- preferences that aren't so strong:
-
- +o 4-column indent.
-
- +o Opening curly on same line as keyword, if possible,
- otherwise line up.
-
- +o Space before the opening curly of a multiline BLOCK.
-
- +o One-line BLOCK may be put on one line, including
- curlies.
-
- +o No space before the semicolon.
-
- +o Semicolon omitted in "short" one-line BLOCK.
-
- +o Space around most operators.
-
- +o Space around a "complex" subscript (inside brackets).
-
- +o Blank lines between chunks that do different things.
-
- +o Uncuddled elses.
-
- +o No space between function name and its opening paren.
-
- +o Space after each comma.
-
- +o Long lines broken after an operator (except "and" and
- "or").
-
- +o Space after last paren matching on current line.
-
-
-
-
-
- 30/Jan/96 perl 5.002 with 1
-
-
-
-
-
- PERLSTYLE(1) User Contributed Perl Documentation PERLSTYLE(1)
-
-
- +o Line up corresponding items vertically.
-
- +o Omit redundant punctuation as long as clarity doesn't
- suffer.
-
- Larry has his reasons for each of these things, but he
- doen't claim that everyone else's mind works the same as
- his does.
-
- Here are some other more substantive style issues to think
- about:
-
- +o Just because you _C_A_N do something a particular way
- doesn't mean that you _S_H_O_U_L_D do it that way. Perl is
- designed to give you several ways to do anything, so
- consider picking the most readable one. For instance
-
- ooooppppeeeennnn((((FFFFOOOOOOOO,,,,$$$$ffffoooooooo)))) |||||||| ddddiiiieeee """"CCCCaaaannnn''''tttt ooooppppeeeennnn $$$$ffffoooooooo:::: $$$$!!!!"""";;;;
-
- is better than
-
- ddddiiiieeee """"CCCCaaaannnn''''tttt ooooppppeeeennnn $$$$ffffoooooooo:::: $$$$!!!!"""" uuuunnnnlllleeeessssssss ooooppppeeeennnn((((FFFFOOOOOOOO,,,,$$$$ffffoooooooo))));;;;
-
- because the second way hides the main point of the
- statement in a modifier. On the other hand
-
- pppprrrriiiinnnntttt """"SSSSttttaaaarrrrttttiiiinnnngggg aaaannnnaaaallllyyyyssssiiiissss\\\\nnnn"""" iiiiffff $$$$vvvveeeerrrrbbbboooosssseeee;;;;
-
- is better than
-
- $$$$vvvveeeerrrrbbbboooosssseeee &&&&&&&& pppprrrriiiinnnntttt """"SSSSttttaaaarrrrttttiiiinnnngggg aaaannnnaaaallllyyyyssssiiiissss\\\\nnnn"""";;;;
-
- since the main point isn't whether the user typed ----vvvv
- or not.
-
- Similarly, just because an operator lets you assume
- default arguments doesn't mean that you have to make
- use of the defaults. The defaults are there for lazy
- systems programmers writing one-shot programs. If you
- want your program to be readable, consider supplying
- the argument.
-
- Along the same lines, just because you _C_A_N omit
- parentheses in many places doesn't mean that you ought
- to:
-
- rrrreeeettttuuuurrrrnnnn pppprrrriiiinnnntttt rrrreeeevvvveeeerrrrsssseeee ssssoooorrrrtttt nnnnuuuummmm vvvvaaaalllluuuueeeessss %%%%aaaarrrrrrrraaaayyyy;;;;
- rrrreeeettttuuuurrrrnnnn pppprrrriiiinnnntttt((((rrrreeeevvvveeeerrrrsssseeee((((ssssoooorrrrtttt nnnnuuuummmm ((((vvvvaaaalllluuuueeeessss((((%%%%aaaarrrrrrrraaaayyyy))))))))))))))));;;;
-
- When in doubt, parenthesize. At the very least it
- will let some poor schmuck bounce on the % key in vvvviiii.
-
- Even if you aren't in doubt, consider the mental
- welfare of the person who has to maintain the code
-
-
-
- 30/Jan/96 perl 5.002 with 2
-
-
-
-
-
- PERLSTYLE(1) User Contributed Perl Documentation PERLSTYLE(1)
-
-
- after you, and who will probably put parens in the
- wrong place.
-
- +o Don't go through silly contortions to exit a loop at
- the top or the bottom, when Perl provides the llllaaaasssstttt
- operator so you can exit in the middle. Just
- "outdent" it a little to make it more visible:
-
- LLLLIIIINNNNEEEE::::
- ffffoooorrrr ((((;;;;;;;;)))) {{{{
- ssssttttaaaatttteeeemmmmeeeennnnttttssss;;;;
- llllaaaasssstttt LLLLIIIINNNNEEEE iiiiffff $$$$ffffoooooooo;;;;
- nnnneeeexxxxtttt LLLLIIIINNNNEEEE iiiiffff ////^^^^####////;;;;
- ssssttttaaaatttteeeemmmmeeeennnnttttssss;;;;
- }}}}
-
-
- +o Don't be afraid to use loop labels--they're there to
- enhance readability as well as to allow multi-level
- loop breaks. See the previous example.
-
- +o Avoid using _g_r_e_p_(_) (or _m_a_p_(_)) or `backticks` in a void
- context, that is, when you just throw away their
- return values. Those functions all have return
- values, so use them. Otherwise use a _f_o_r_e_a_c_h_(_) loop
- or the _s_y_s_t_e_m_(_) function instead.
-
- +o For portability, when using features that may not be
- implemented on every machine, test the construct in an
- eval to see if it fails. If you know what version or
- patchlevel a particular feature was implemented, you
- can test $$$$]]]] ($PERL_VERSION in EEEEnnnngggglllliiiisssshhhh) to see if it
- will be there. The CCCCoooonnnnffffiiiigggg module will also let you
- interrogate values determined by the CCCCoooonnnnffffiiiigggguuuurrrreeee program
- when Perl was installed.
-
- +o Choose mnemonic identifiers. If you can't remember
- what mnemonic means, you've got a problem.
-
- +o While short identifiers like $$$$ggggoooottttiiiitttt are probably ok,
- use underscores to separate words. It is generally
- easier to read $$$$vvvvaaaarrrr____nnnnaaaammmmeeeessss____lllliiiikkkkeeee____tttthhhhiiiissss than
- $$$$VVVVaaaarrrrNNNNaaaammmmeeeessssLLLLiiiikkkkeeeeTTTThhhhiiiissss, especially for non-native speakers
- of English. It's also a simple rule that works
- consistently with VAR_NAMES_LIKE_THIS.
-
- Package names are sometimes an exception to this rule.
- Perl informally reserves lowercase module names for
- "pragma" modules like iiiinnnntttteeeeggggeeeerrrr and ssssttttrrrriiiicccctttt. Other
- modules should begin with a capital letter and use
- mixed case, but probably without underscores due to
- limitations in primitive filesystems' representations
- of module names as files that must fit into a few
- sparse bites.
-
-
-
- 30/Jan/96 perl 5.002 with 3
-
-
-
-
-
- PERLSTYLE(1) User Contributed Perl Documentation PERLSTYLE(1)
-
-
- +o You may find it helpful to use letter case to indicate
- the scope or nature of a variable. For example:
-
- $$$$AAAALLLLLLLL____CCCCAAAAPPPPSSSS____HHHHEEEERRRREEEE ccccoooonnnnssssttttaaaannnnttttssss oooonnnnllllyyyy ((((bbbbeeeewwwwaaaarrrreeee ccccllllaaaasssshhhheeeessss wwwwiiiitttthhhh ppppeeeerrrrllll vvvvaaaarrrrssss!!!!))))
- $$$$SSSSoooommmmeeee____CCCCaaaappppssss____HHHHeeeerrrreeee ppppaaaacccckkkkaaaaggggeeee----wwwwiiiiddddeeee gggglllloooobbbbaaaallll////ssssttttaaaattttiiiicccc
- $$$$nnnnoooo____ccccaaaappppssss____hhhheeeerrrreeee ffffuuuunnnnccccttttiiiioooonnnn ssssccccooooppppeeee mmmmyyyy(((()))) oooorrrr llllooooccccaaaallll(((()))) vvvvaaaarrrriiiiaaaabbbblllleeeessss
-
- Function and method names seem to work best as all
- lowercase. E.g., $$$$oooobbbbjjjj->_a_s___s_t_r_i_n_g_(_).
-
- You can use a leading underscore to indicate that a
- variable or function should not be used outside the
- package that defined it.
-
- +o If you have a really hairy regular expression, use the
- ////xxxx modifier and put in some whitespace to make it look
- a little less like line noise. Don't use slash as a
- delimiter when your regexp has slashes or backslashes.
-
- +o Use the new "and" and "or" operators to avoid having
- to parenthesize list operators so much, and to reduce
- the incidence of punctuational operators like &&&&&&&& and
- ||||||||. Call your subroutines as if they were functions
- or list operators to avoid excessive ampersands and
- parens.
-
- +o Use here documents instead of repeated _p_r_i_n_t_(_)
- statements.
-
- +o Line up corresponding things vertically, especially if
- it'd be too long to fit on one line anyway.
-
- $$$$IIIIDDDDXXXX ==== $$$$SSSSTTTT____MMMMTTTTIIIIMMMMEEEE;;;;
- $$$$IIIIDDDDXXXX ==== $$$$SSSSTTTT____AAAATTTTIIIIMMMMEEEE iiiiffff $$$$oooopppptttt____uuuu;;;;
- $$$$IIIIDDDDXXXX ==== $$$$SSSSTTTT____CCCCTTTTIIIIMMMMEEEE iiiiffff $$$$oooopppptttt____cccc;;;;
- $$$$IIIIDDDDXXXX ==== $$$$SSSSTTTT____SSSSIIIIZZZZEEEE iiiiffff $$$$oooopppptttt____ssss;;;;
-
- mmmmkkkkddddiiiirrrr $$$$ttttmmmmppppddddiiiirrrr,,,, 0000777700000000 oooorrrr ddddiiiieeee """"ccccaaaannnn''''tttt mmmmkkkkddddiiiirrrr $$$$ttttmmmmppppddddiiiirrrr:::: $$$$!!!!"""";;;;
- cccchhhhddddiiiirrrr(((($$$$ttttmmmmppppddddiiiirrrr)))) oooorrrr ddddiiiieeee """"ccccaaaannnn''''tttt cccchhhhddddiiiirrrr $$$$ttttmmmmppppddddiiiirrrr:::: $$$$!!!!"""";;;;
- mmmmkkkkddddiiiirrrr ''''ttttmmmmpppp'''',,,, 0000777777777777 oooorrrr ddddiiiieeee """"ccccaaaannnn''''tttt mmmmkkkkddddiiiirrrr $$$$ttttmmmmppppddddiiiirrrr////ttttmmmmpppp:::: $$$$!!!!"""";;;;
-
-
- +o Always check the return codes of system calls. Good
- error messages should go to STDERR, include which
- program caused the problem, what the failed system
- call and arguments were, and VERY IMPORTANT) should
- contain the standard system error message for what
- went wrong. Here's a simple but sufficient example:
-
- ooooppppeeeennnnddddiiiirrrr((((DDDD,,,, $$$$ddddiiiirrrr)))) oooorrrr ddddiiiieeee """"ccccaaaannnn''''tttt ooooppppeeeennnnddddiiiirrrr $$$$ddddiiiirrrr:::: $$$$!!!!"""";;;;
-
-
- +o Line up your translations when it makes sense:
-
-
-
-
- 30/Jan/96 perl 5.002 with 4
-
-
-
-
-
- PERLSTYLE(1) User Contributed Perl Documentation PERLSTYLE(1)
-
-
- ttttrrrr [[[[aaaabbbbcccc]]]]
- [[[[xxxxyyyyzzzz]]]];;;;
-
-
- +o Think about reusability. Why waste brainpower on a
- one-shot when you might want to do something like it
- again? Consider generalizing your code. Consider
- writing a module or object class. Consider making
- your code run cleanly with uuuusssseeee ssssttttrrrriiiicccctttt and ----wwww in
- effect. Consider giving away your code. Consider
- changing your whole world view. Consider... oh, never
- mind.
-
- +o Be consistent.
-
- +o Be nice.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 30/Jan/96 perl 5.002 with 5
-
-
-